#include <iostream>
using namespace std;

class Base
{
public:
  // 纯虚函数
  // 只要有一个纯虚函数，这个类称为抽象类
  // 特点：
  // 1. 无法实例化对象
  // 2. 抽象类的子类，必须重写父类中的纯虚函数，否则也属于抽象类
  virtual void func() = 0;
};

class Son : public Base
{
public:
  virtual void func(){
    cout << "func函数调用" << endl;
  };
};

void test()
{
  // 不允许使用抽象类类型 "Base" 的对象: -- 函数 "Base::func" 是纯虚拟函数
  // Base b;
  // new Base;

  // Son s; // 子类，必须重写父类中的纯虚函数，否则也属于抽象类

  Base * base = new Son;

  base->func();
}

int main(int argc, char const *argv[])
{
  test();
  return 0;
}